【小ネタ】 AWS Systems Manager のマネージドインスタンス(RaspberryPi)を踏み台にして、Windows10にリモートデスクトップで接続してみました。
1 はじめに
AWS Systems Manager(以下、SSM)では、エージェントをインストールすることで、AWS経由で遠隔からの簡単に操作が可能になります。しかし、残念ながらWindows 10には、対応したSSMエージェントがありません。
今回は、Windows10と同じネットワークに、エージェントをインストールしたRaspberryPiを配置し、これを踏み台にしてリモートデスクトップで接続する要領を試してみました。
構成は、以下のとおりです。
MacからRasberryPiに対し、SSHでポートフォワーディングを構成し、Microsoft Remote Desktopでローカルに対してアクセスしています。
申し訳ありませんが、本記事は、単純にsshでポートフォワーディングしているだけです。個人的な備忘録になっている事をどうかお許しください。
2 作業内容
作業した内容は以下のとおりです。
- アクティベーションの作成
- RaspberryPiにSSMエージェントをセットアップ
- Windows10でリモート接続を許可
- SSHでポートフォワーディング
- RDPクライアントで接続
(1) アクティベーションの作成
AWS Systems Managerのコンソールからインスタンスとノード > ハイブリッドアクティベーション と辿りアクティベーションの作成を選択します。
適当な名前だけを指定して作成します。
特に何も設定しないで作成すると、24時間以内に1回だけ登録可能なアクティベーションが生成されます。上部に表示されているActivation CodeとActivation IDをコピーしておいて下さい。
なお、IAMロールは、AmazonSSMManagedInstanceCoreとAmazonSSMDirectoryServiceAccessがアタッチされたデフォルトのAmazonEC2RunCommandRoleForManagedInstancesというRoleが設定されています。
(2) RaspberryPiにSSMエージェントをセットアップ
踏み台として使用するRaspberryPiにSSMのエージェントをインストールして、登録します。
参考:Step 5: Install SSM エージェント for a hybrid environment (Linux)
※ "activation-code" と "activation-id" は、先程コピーしたものを使用します。
mkdir /tmp/ssm $ sudo curl https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm/amazon-ssm-agent.deb -o /tmp/ssm/amazon-ssm-agent.deb $ sudo dpkg -i /tmp/ssm/amazon-ssm-agent.deb $ sudo service amazon-ssm-agent stop $ sudo amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "ap-northeast-1" New Seelog Logger Creation Complete 2020-09-02 21:15:43 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-0c26ad2025e41df5c $ sudo service amazon-ssm-agent start
2023/11/12 修正
登録されたインスタンスは、マネージドインスタンスに列挙されます。
登録されたインスタンスは、フリートマネージャーに列挙されます。
(3) Windows10でリモート接続を許可
コントロールパネル > システムセキュリテイ > このコンピューターへのリモート接続を許可する を選択します。
※ Administratorsグループ以外のユーザーの場合は、ユーザーの選択から追加が必要です。
(4) SSHでポートフォワーディング
SSHで踏み台経由でポートフォワーディングするには、以下のコマンドを実行します。
$ ssh pi@{インスタンスID} -o ProxyCommand=" sh -c \"aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --p {プロファイル名}\"" -L 3389:{WindowsPCのIPアドレス}:3389
以下のように、踏み台のRaspberryPiにログイン状態になったら完了です。
(5) RDPクライアントで接続
接続先をlocalhost(127.0.0.1)に設定して起動すると、無事接続されます。
3 起動バッチファイル
SSHトンネルを作成してからRDPクライアントを立ち上げるという事で、やや作業が手間となるので、下記のようなバッチファイルを作成すると便利かもしれません。
rdp.command
#!/bin/bash open -a "Microsoft Remote Desktop" ssh pi@mi-0c26ad2025e41df5c -o ProxyCommand=" sh -c \"aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --p profile\"" -L 3389:192.168.0.115:3389
実行権を与えてデスクトップなどを置いておけば、クリックだけで簡単に接続できるようになります。
% pwd /Users/sin/Desktop % chmod 755 rdp.command % ls -la rdp* -rwxr-xr-x@ 1 sin staff 602 9 3 04:29 rdp.command
4 最後に
今回は、SSMのマネージドインスタンスを踏み台として、RDPに接続する要領を確認してみました。 ポート番号を3389から5900に変更すると、まったく同じ要領でVNCでも利用可能です。